#构建单jar的docker镜像, 单jar镜像的实用意义不大,仅用于简单示例
#资料
#  https://www.runoob.com/docker/docker-build-command.html
#  https://www.runoob.com/docker/docker-dockerfile.html
#实例
#  sonar: https://github.com/SonarSource/docker-sonarqube/blob/master/9/community/Dockerfile
#idea语法高亮,安装插件[docker](默认已安装的?);关键字要大写才能被识别!


#镜像构建命令,按要求传参
#docker build \
#--build-arg JAR_FILE="文件名.jar" \
#--tag "app名:版本号" \
#.;

#============正文
# 不同linux使用的jdk/jre: https://www.cnblogs.com/javaDeveloper/p/4995947.html
# https://hub.docker.com/_/openjdk
FROM openjdk:8

#[docker build]的入参
ARG JAR_FILE

#定义容器环境变量
#.把[JAR_FILE]入参加入环境变量
#.实现docker run时传参,如:-e JAVA_OPTS="-Dfile.encoding=UTF-8"
ENV JAR_FILE=${JAR_FILE}
ENV APP_HOME="/app"
ENV JAVA_OPTS=""

#修正时区:https://www.jianshu.com/p/eaac0b8ee385
RUN set -eux; \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime; echo "Asia/Shanghai">/etc/timezone;

#复制外部文件到镜像内,会自动创建镜像内的目录
ADD ${JAR_FILE} ${APP_HOME}/${JAR_FILE}

WORKDIR ${APP_HOME}

#CMD和ENTRYPOINT,及两种写法
#  https://www.cnblogs.com/boshen-hzb/p/6401399.html
#  两者都有两种写法:exec和shell
#  CMD会被入参覆盖,如:docker run -it -p 8080:8080 --name cicd cicd  /bin/bash
#使用变量
#  https://www.cnblogs.com/hahaha111122222/p/15830845.html
#  注意:使用的是上文定义的ENV环境变量, 而非build时的ARG入参变量!
ENTRYPOINT java ${JAVA_OPTS} -jar ${JAR_FILE}

#其他写法
#ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar ${JAR_FILE}"]
#CMD /bin/bash